#include "graph.h"
#pragma GCC optimize("Ofast","unroll-loops","inline")
#include<bits/stdc++.h>
#define ll long long
//#define int ll
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define MP make_pair
using namespace std;
namespace my{
	const int N=200+20,M=1e6+20,mod=998244353;
	int ans[N];
	int col[N],ct;
	int g[N][N];
	vector<int> e[N];
	int t[N][N];
	vector<int> G[N];
	bool fl=0;
	void dfs(int u,int x){
		bool flag=0;
		for(int v:e[u]){
			flag=1;
			Move(g[u][v],col[u]);
			dfs(v,x);
			Move(g[v][u],col[v]);
		}
		int val=col[u]==3?2:3;
		if(!flag){
			int D=NumberOfRoads();
			for(int i=1;i<=D;i++){
				Move(i,col[u]);
				int cl=Color();
				if(cl==1){
					fl=1;
					col[++ct]=val;
					g[u][ct]=i;
					g[ct][u]=LastRoad();
					e[u].pb(ct);
					Move(g[ct][u],col[ct]);
					ans[x]++;
				}
				else{
					Move(LastRoad(),cl);
				}
				
			}
		}
	}
	void re(int u,int fa){
		for(int v:G[u]) if(v!=fa){
			Move(t[u][v],1);
			re(v,u);
			Move(t[v][u],1);
		}
	}
	void solve(int u){
		for(int i=1;i<N;i++) for(int j=1;j<N;j++) g[i][j]=0;
		for(int i=1;i<N;i++) e[i].clear(),col[i]=1;
		if(u!=1) re(u,0);
		ct=1;fl=1;
		col[1]=2;
		for(int i=1;fl;i++) fl=0,dfs(1,i);
	}
	void DFS(int u,int fa){
		if(u!=1) solve(u);
		for(int v:G[u]) if(v!=fa){
			Move(t[u][v],1);
			DFS(v,u);
			Move(t[v][u],1);
		}
	}
}
void Inspect(int R) {
    for(int i=1;i<my::N;i++) my::col[i]=1; 
	my::solve(1);
	for(int i=1;i<my::N;i++) for(int v:my::e[i]){
		my::G[i].pb(v),my::G[v].pb(i);
	}
	for(int i=1;i<my::N;i++) for(int j=1;j<my::N;j++) my::t[i][j]=my::g[i][j];
	my::DFS(1,0);
//	for(int i=1;i<=R;i++) cerr<<my::ans[i]<<'\n';
	for(int i=1;i<=R;i++) Answer(i,my::ans[i]/2);
}
